It is well known in the art of data communications that many data communications systems are designed in layers, with each layer depending on the layer below to provide defined services. It is also well known that, in sending a particular data communication, data transformation may be necessary during data transmission when data moves from one layer to another. One particular simple example of such a transformation is the transformation of data from an internal format suitable for use in a computer to a transmission format suitable for transmission on a given medium.
In many cases, published standards define the way in which data is to be carried in a given layer and may also define data transformations which are necessary for entering that layer. For example, ANSI standard X3.230-1994 (FC-PH) defines, at clause 11, a transformation from data octets, having 8 bits, to 10-bit code groups for transmission over a fiber connection; this is also known as the ANSI Fiber Channel Transmission Code, and is also referred to herein as the "transmission code". The transmission code is used not only over fiber channels, but also in certain Asynchronous Transfer Mode (ATM) and high-speed Gigabit Ethernet communications systems, as are known in the art. Encoding of data octets to 10-bit code groups is referred to herein as "8B/10B encoding".
The transmission code is known to improve the transmission characteristics of information to be transmitted across the link. For example, the transmission code ensures that sufficient transitions are present in the bit stream to make clock recovery possible at a receiver. The coding is also known to increase the likelihood of detecting any single or multiple bit errors that may occur during transmission and reception of information.
A high level view of a typical prior art system for performing 8B/10B encoding is shown in FIG. 1. In the prior art system of FIG. 1, an 8-bit input represented as HGFEDCBA and a current running disparity value are input to an 8B/10B table-lookup-based encoder. The 8B/10B table-lookup-based encoder is operative to look in a table comprising a large number of entries to determine the correct 10-bit code value and the new value for the running disparity.
A lookup table used by a prior art 8B/10B table-lookup-based encoder may comprise 512 entries, the 512 entries comprising one entry for each of the two possible running disparity values, for each of the 256 possible 8-bit input values. Alternatively, such a lookup table may comprise 256 double entries, each of the 256 double entries being associated with one of the 256 possible 8-bit input values, and each of the double entries comprising two sub-entries corresponding respectively to each of the two possible running disparity values. In either case, the prior art teaches building and using such a lookup table to perform 8B/10B encoding. Building and using such a lookup table based on ANSI standard X3.230-1994 (FC-PH), referred to above, is well known in the art. The prior art method used by an 8B/10B table-lookup-based encoder is referred to throughout the present specification and claims as an "8B-10B table lookup".
The following general discussion of running disparity may be helpful in understanding the state of the art.
Running disparity for a ten bit code-group is calculated on the basis of sub-blocks, where the first six bits (abcdei) form one sub-block (six-bit sub-block) and the second four bits (fghj) form the other sub-block (four-bit sub-block). Running disparity at the beginning of the six-bit sub-block is the running disparity at the end of the last code-group. Running disparity at the beginning of the four-bit sub-block is the running disparity at the end of the six-bit sub-block. Running disparity at the end of the code-group is the running disparity at the end of the four-bit sub-block.
Running disparity for the sub-blocks is calculated as follows:
a) Running disparity at the end of any sub-block is positive if the sub-block contains more ones than zeros. It is also positive at the end of the six-bit sub-block if the six-bit sub-block is 000111, and it is positive at the end of the four-bit sub-block if the four-bit sub-block is 0011; PA1 b) Running disparity at the end of any sub-block is negative if the sub-block contains more zeros than ones. It is also negative at the end of the six-bit sub-block if the six-bit sub-block is 111000, and it is negative at the end of the four-bit sub-block if the four-bit sub-block is 1100; PA1 c) Otherwise, running disparity at the end of the sub-block is the same as at the beginning of the sub-block. PA1 1. In the form of an unencoded octet and asserted control variable K, in certain cases. PA1 2. In the encoder itself. PA1 deriving an intermediate result from a table having fewer than 500 entries; and PA1 performing a logical operation on the intermediate result to generate the ten-bit code group. PA1 wherein deriving the intermediate result includes: PA1 computing an 8B to 10B transformation, PA1 wherein the 8B to 10B transformation is computed without performing an 8B-10B table lookup. PA1 computing an 8B to 10B transformation in a processing device controlled by a clock having a clock cycle, PA1 wherein the step of computing an 8B to 10B transformation is performed in exactly one clock cycle. PA1 a lookup subunit, which derives an intermediate result based on the data octet from a table having fewer than 500 entries; and PA1 a ten-bit code group computation subunit, which performs a logical operation on the intermediate result to generate the ten-bit code group. PA1 an 8B/10B computation based encoder for computing an 8B to 10B transformation, wherein PA1 the 8B to 10B transformation is computed without performing an 8B-10B table lookup. PA1 an 8B/10B computation based encoder for computing an 8B to 10B transformation, the 8B/10B computation based encoder being controlled by a clock having a clock cycle, and being operative to compute the 8B to 10B transformation in exactly one clock cycle.
U.S. Pat. No. 4,486,739, to Franaszek et al, describes a binary 8B/10B code and an encoder circuit for generating the code, for use in transmission over electromagnetic or optical transmission lines. U.S. Pat. No. 4,486,739 is presently assigned to the assignee of the instant application. Each 8-bit input block is partitioned into two sub-blocks consisting of 5 and 3 contiguous bits, respectively. Certain individual bits in each sub-block are altered to produce an alternate code pattern. A running disparity is determined and is used in generating the coded output.
In U.S. Pat. No. 4,486,739 it will be appreciated, particularly from FIG. 9 and the description thereof, that both rising and falling edges of a single clock are used in timing the operation of different components of the apparatus described therein. Thus, the apparatus of U.S. Pat. 4,486,739 is not capable of performing 8B/10B encoding in a single clock cycle.
It is further noted that U.S. Pat. No. 4,486,739 describes use of a control variable K based on an unencoded information octet. Since the encoder function described by U.S. Pat. No. 4,486,739 does not receive any control information when receiving an unencoded octet, it must be that the physical coding sublayer, in which an encoder would reside, would need to encode incoming control information twice:
The disclosures of all references mentioned above and throughout the present specification are hereby incorporated herein by reference.